package com.ddshuai.easy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 描述 数组形式的整数加法
 * <p>
 * 对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。
 * 给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。
 * <p>
 * 示例 1：
 * <p>
 * 输入：A = [1,2,0,0], K = 34
 * 输出：[1,2,3,4]
 * 解释：1200 + 34 = 1234
 * 解释 2：
 * <p>
 * 输入：A = [2,7,4], K = 181
 * 输出：[4,5,5]
 * 解释：274 + 181 = 455
 * 示例 3：
 * <p>
 * 输入：A = [2,1,5], K = 806
 * 输出：[1,0,2,1]
 * 解释：215 + 806 = 1021
 * 示例 4：
 * <p>
 * 输入：A = [9,9,9,9,9,9,9,9,9,9], K = 1
 * 输出：[1,0,0,0,0,0,0,0,0,0,0]
 * 解释：9999999999 + 1 = 10000000000
 * <p>
 * 提示：
 * <p>
 * 1 <= A.length <= 10000
 * 0 <= A[i] <= 9
 * 0 <= K <= 10000
 * 如果 A.length > 1，那么 A[0] != 0
 *
 * @author ddshuai
 * @date 2019-04-17 09:44
 **/
public class AddToArrayForm {

    public static List<Integer> addToArrayForm(int[] A, int K) {

        List<Integer> integers = new ArrayList<>(20);

        String sk = String.valueOf(K);
        int idx = sk.length() - 1;
        boolean needStep = false;
        for (int i = A.length - 1; i > -1; i--) {
            int sum = A[i];
            if (idx > -1) {
                sum = A[i] + Integer.valueOf(String.valueOf(sk.charAt(idx)));
            }

            if (sum >= 10) {
                if (i == 0) {
                    sum = sum - 10;
                    needStep = true;
                } else {
                    A[i - 1] = A[i - 1] + 1;
                    sum = sum - 10;
                }
            }

            integers.add(sum);
            idx--;
        }
        if (idx > -1) {
            for (int i = idx; i > -1; i--) {
                int num = Integer.valueOf(String.valueOf(sk.charAt(i)));
                if (needStep) {
                    num++;
                    if (num >= 10) {
                        num = num - 10;
                        needStep = true;
                    } else {
                        needStep = false;
                    }
                }

                integers.add(num);
            }
            if (needStep){
                integers.add(1);
            }
        } else {
            if (needStep) {
                integers.add(1);
            }
        }
        Collections.reverse(integers);
        return integers;
    }


    public static void main(String[] args) {
        System.out.println(addToArrayForm(new int[]{7}, 993));
    }
}
